﻿/**********************************************************************
 * @file   FITKRadiossResultRequest.h
 * @brief  Radioss 结果请求
 * @author liuzhonghua (liuzhonghuaszch@163.com)
 * @date   2025-09-09
 *********************************************************************/
#ifndef __FITKRADIOSSRESULTREQUEST_H__
#define __FITKRADIOSSRESULTREQUEST_H__

#include "FITKRadiossDataAPI.h"
#include "FITK_Kernel/FITKCore/FITKAbstractDataObject.h"

namespace Radioss
{

    /**
     * @brief  Radioss 求解设置
     * @author liuzhonghua (liuzhonghuaszch@163.com)
     * @date   2025-09-05
     */
    class FITKRadiossDataAPI FITKRadiossResultRequest : public Core::FITKAbstractDataObject
    {
        Q_OBJECT
    public:
        /**
         * @brief  节点动画输出类型 /ANIM/VECT/
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2025-09-09
         */
        enum NodalOutputAnimationsType
        {
            Nodal_Displacement,                ///< 位移
            Nodal_Velocity,                    ///< 速度
            Nodal_Acceleration,                ///< 加速度
            Nodal_ContactForces,               ///< 加速度
            Nodal_RigidBodyForcesMoments,      ///< 刚体的力和力矩
            Nodal_InternalForces,              ///< 内部力
            Nodal_ContactPressure,             ///< 接触压力
        };
        Q_ENUM(NodalOutputAnimationsType);
        /**
         * @brief  单元动画输出类型
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2025-09-09
         */
        enum ElementalOutputAnimationsType
        {
            Elemental_Stress,                      ///< 应力
            Elemental_StressAllIntegrationPoints,  ///< 所有积分点的应力
            Elemental_Strain,                      ///< 应变
            Elemental_StrainAllIntegrationPoints,  ///< 所有积分点的应变
            Elemental_SpecificEnergyDensity,       ///< 特殊能量密度 （包含砖块元素数据）六面体
            Elemental_PlasticStrain,               ///< 塑性应变 （包含砖块元素数据）六面体
            Elemental_HourglassEnergy,             ///< 沙漏能量 (发动机舱)
            Elemental_VonMisesStress,              ///< 等效应力
            Elemental_Pressure,                    ///< 压力
            Elemental_Density,                     ///< 密度
            Elemental_ShellDamageOfAll,            ///< 壳的损伤
            Elemental_SolidDamageOfAll,            ///< 实体的损伤
        };
        Q_ENUM(ElementalOutputAnimationsType);

    public:
        /**
         * @brief  构造函数
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2025-09-05
         */
        explicit FITKRadiossResultRequest();
        
        /**
         * @brief 析构函数
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2025-09-05
         */
        virtual ~FITKRadiossResultRequest();
        /**
         * @brief    设置开始时间
         * @param[i] time
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-09-08
         */
        void setStartTime(const double time);
        /**
         * @brief    获取开始时间
         * @return   double
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-09-08
         */
        double getStartTime() const;

        /**
         * @brief    设置频率
         * @param[i] f
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-09-08
         */
        void setFrequency(const double f);
        /**
         * @brief    获取频率
         * @return   double
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-09-08
         */
        double getFrequency() const;
        /**
         * @brief    设置节点数据动画
         * @param[i] anim 
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-09-09
         */
        void setNodalOutputAnim(QList<NodalOutputAnimationsType> anim);
        /**
         * @brief    获取节点数据动画
         * @return   QList<NodalOutputAnimationsType>
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-09-09
         */
        QList<NodalOutputAnimationsType> getNodalOutputAnim();
        /**
         * @brief    设置单元数据动画
         * @param[i] anim 
         * @return   void
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-09-09
         */
        void setElementalOutputAnim(QList<ElementalOutputAnimationsType> anim);
        /**
         * @brief    获取单元数据动画
         * @return   QList<ElementalOutputAnimationsType>
         * @author   liuzhonghua (liuzhonghuaszch@163.com)
         * @date     2025-09-09
         */
        QList<ElementalOutputAnimationsType> getElementalOutputAnim();


    private:
        /**
         * @brief  开始时间
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2025-09-05
         */
        double _startTime{ 0.0 };
        /**
         * @brief  频率
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2025-09-09
         */
        double _frequency{ 0.0005 };
        /**
         * @brief  节点动画类型
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2025-09-09
         */
        QList<NodalOutputAnimationsType> _nodalAnims{};
        /**
         * @brief  单元动画类型
         * @author liuzhonghua (liuzhonghuaszch@163.com)
         * @date   2025-09-09
         */
        QList<ElementalOutputAnimationsType> _elementalAnims{};

    };


} // namespace Radioss

#endif // __FITKRADIOSSSOLVERSETTINGS_H__